热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

首部|主体_HTTP连接管理

篇首语:本文由编程笔记#小编为大家整理,主要介绍了HTTP连接管理相关的知识,希望对你有一定的参考价值。HTTP常见状态码ÿ

篇首语:本文由编程笔记#小编为大家整理,主要介绍了HTTP连接管理相关的知识,希望对你有一定的参考价值。



HTTP

常见状态码:



状态码 原因短语 含义


100 Continue 说明收到了请求的初始部分,请客户端继续,发送了这个状态码之后,
服务器在收到请求之后必须进行响应。


101 Switching Protocols 说明服务器正在根据客户端的指定,将协议切换成Update首部所列的
协议


200 OK 请求没问题,实体的主体部分包含了所请求的资源


201 Created 用于创建服务器对象的请求(比如,PUT)。响应的实体主体部分中
应该包含各种引用了已创建的资源的URL,Location首部包含的则是最具体的引用。


202 Accepted 请求已被接受,但服务器还未对其执行任何动作。不能保证服务器会完成这
个请求;这只是意味着接受请求时,它看起来是有效的。服务器应该在实体的主体部分包含对请求状态的描述,或许还应该有对请求完成时间的估计(或者包含一个指针,指向可以获取此信息的位置)


203 Non-Authoritative 实体首部包含的信息不是来自原远端服务器,而是来自于资源的一份副本。
Information 如果中间节点上有一份资源副本,但无法或者没有对它所发送的与资源有关的
元信息进行验证,就会出现这种情况


204 No Content 响应报文中包含若干首部和一个状态行,但没有实体的主体部分。主要用于在
浏览器不转为显示新文档的情况下,对其进行更新(比如刷新一个表单页面)


205 Reset Content 另一个主要用于浏览器的代码。负责告知浏览器清除当前页面中的所有html
表单元素


206 Partial Content 成功执行了一个部分或Range(范围)请求。稍后我们会看到,客户端可以通过
一些特殊的首部来获取部分或某个范围内的文档————这个状态码就说明范围请求成功了。


注:在对那些包含了重定向状态码的非HEAD请求进行响应时,最好要包含一个实体,并在实体中包含描述信息和指向(多个)重定向URL的链接。如:
HTTP/1.1 301 OK
Location: http://www.gentle-grooming.com/
Content-Length: 56
Content-Type: text/plain
Please go to our partner site,
www.gentle-grooming.com
300 Multiple Choices 客户端请求一个实际指向多个资源的URL时会返回这个状态码,比如服务器
上有某个HTML文档的英语和法语版本。返回这个代码时会带有一个选项列表;这样用户就可以选择它希望使用的那一项了。有多个版本可用时,客户端需要沟通解决。
301 Moved Permanently 在请求的URL已被移除时使用。响应的Location首部中应该包含资源现在所处
的URL
302 Found 与301状态码类似,但是,客户端应该使用Location首部给出的URL来临时定位
资源。将来的请求仍应该使用老的URL
303 See Other 告知客户端应该用另一个URL来获取资源。新的URL位于响应报文的Location
首部。其主要母的是允许POST请求的响应将客户端定向到某个资源上去
304 Not Modified 客户端可以通过所包含的请求首部,使其请求变成有条件的。如果客户端发起
了一个条件GET请求,而最近资源未被修改的话,就可以用这个状态码来说明
资源未被修改。带有这个状态码的响应不应该包含实体的主体部分。
305 Use Proxy 用来说明必须通过一个代理访问资源;代理的位置由Location首部给出。很
重要的一点是,客户端是相对某个特定资源来解析这条响应的,不能假定所有请求。甚至所有对持有请求资源的服务器的请求都通过这个代理进行。如果客户端错误地让代理介入了某条请求,可能会引发破坏性的行为,而且会造成安全漏洞。
307 Temporary Redireat 与301状态码类似;但客户端应该使用Location首部给出的URL来临时定位资源
。将来的请求应该使用老的URL
400 Bad Request 用于告知客户端发起了一个错误的请求

401 Unauthorized 返回适当的首部,用于获取客户端访问资源的权限

402 Payment Required 此状态码未使用,保留

403 Forbidden 服务器拒绝请求,可在响应主体中告知原因

404 Not Found 用于告知客户端请求的资源在服务器不存在

405 Method Not Allowd 告知客户端不支持当前方法,并在Allow首部返回支持的方法

406 Not Acceptable 没有客户端支持的资源类型

407 Proxy Authentication 跟401类似,不过用户代理服务器
Requireed

408 Request Timeout 超时提醒

409 Conflict 请求会造成服务器冲突

410 Gone 跟404一样,只不过服务器曾经拥有过该请求资源

411 Length Required 要求客户端发送Content-Length首部

412 Precondition Failed 部分条件验证不通过

413 Request Entity Too Large 客户端发送的主体超过了服务器的希望的长度

414 Request URL Too Long 客户端请求的时间比服务希望的时间长

415 Unsupported Media Type 服务器无法理解客户端请求的主体类型

416 Requested Range Not 请求报文所请求的是指定资源的某个范围,而此范围无效或无法满足时
Satisfiable ,使用此状态码

417 Expectation Failed 请求中包含Expect首部,服务器无法满足

500 Internal Server Error 服务器错误

501 Not Implemented 请求超出了服务器能处理的范围

502 Bad Gateway 作为代理或网关使用的服务器从请求响应链的下一条链路上收到了一条
伪响应(比如,它无法连接到其父网关)时,使用此状态码

503 Service Unavailable 用来说明服务器现在无法为请求提供服务,但将来可以。如果服务器
知道什么时候资源会变为可用的,可以在响应中包含包含一个
Retry-After首部。

504 Gateway Timeout 与状态码408类似,只是这里的响应来自一个网关或代理,它们在等待另
一服务器对其请求进行响应时超时了

505 HTTP Version Not 服务器收到的请求使用了它无法或不愿支持的协议版本时,使用此
Supported 状态码。有些服务器应用程序会选择不支持协议的早起版本


HTTP常见的TCP时延:


  • TCP连接建立握手。较小的HTTP事务可能会在TCP建立上花费50%,如果重用现存连接,可能会减少TCP建立时延造成的影响。
  • TCP慢启动拥塞控制
  • 数据聚集的Nagle算法
  • 用于捎带确认的TCP延迟确认算法
  • TIME_WAIT 的时延和端口耗尽

HTTP串行连接时延问题

若每个HTTP事务都串行的建立一条新连接,那么连接时延和慢启动时延就会叠加,造成可观的时延问题

优化的主要方法:


  • 并行连接,代价是增加系统消耗、服务器负载

  • 持久化(重用)连接

  • 管道化连接,在持久连接的情况下,在响应到达之前,可以将多条请求放入队列。当第一条请求到达后,第二、三条请求也可以发送。


HTTP/1.1持久连接

HTTP1.0使用 keep-alive ,而HTTTP/1.1停止了对keep-alive 连接的支持,而是持久连接的设计,目的相同,但工作机制更优。

与HTTP/1.0的keep-alive连接不同,HTTP/1.1持久连接在默认情况下是激活的,除非特别指明,否则HTTP/1.1所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1应用程序必须向报文中显式添加一个Connection:close 首部。

当然HTTP/1.1客户端和服务器仍然可以随时关闭空闲的连接。不发送Connection:close并不意味着服务器承诺永远将连接保持在打开状态。


管道化连接的限制:


  • 如果不是持久连接就不要使用管道连接
  • 接收端必须按收到请求报文的顺序返回响应报文,因为HTTP报文中没有序列号标签。所以必须靠按序发送响应报文来达到“数据对应”
  • 发送端应该做好数据没有发送完连接就关闭的准备,并开始重新发送未完成数据。
  • HTTP客户端不应该用管道化的方式发送会产生副作用的请求(比如POST)。客户端不应该以管道化的方式传送非幂等请求。

连接关闭管理的问题

HTTP客户端、服务器或代理都可以在任意时刻关闭一条TCP传输连接。问题是,服务器永远都无法确定在它关闭连接的那一刻(以及因错误而关闭时),对端的客户端是否有数据要发送。(所以关闭连接需要使用“半关闭”、“等待一段时间空闲”等方式)

一般客户端在执行事务的过程中,如果传输连接关闭了,一般会重新打开连接并重新发送一次,但此重试要考虑是否会有副作用,即重试的处理行为必须是幂等的。

HTTP应用程序复杂之后,关闭连接需要使用半关闭来防止写入错误。一般应先关闭其输出信道,然后周期性地检查其输入信道的状态(查找数据,或流的末尾)。


HTTP重定向与负载均衡

现代网络中重定向是比较普遍的,HTTP重定向的原因:

1)可靠地执行HTTP事务

2)最小化时延

3)节约网络带宽

由于这些原因,web内容通常分布在很多地方。(出于可靠性原因:如果一个位置出问题了,还有其他的可用;客户端选择较近的资源,可以降低响应时间;将目标服务器分散,还可以减少网络拥塞。)

大多数重定向部署都包含了某些形式的负载均衡;反之因为输入报文一定会在分担负荷的服务器之间进行某种分布,所以任意形式的负载均衡中都包含了重定向。

浏览器配置、DNS、TCP/IP路由以及HTTP都提供了重定向报文的机制。


将报文重定向到服务器的方法:

机制工作方式重新路由的基础局限性
HTTP重定向HTTP请求到达首个服务器后,该服务器选择一台最佳的服务器为其提供内容。第一台服务器会向客户端发送一条到指定服务器的HTTP重定向。客户端会将请求重新发送到选中的服务器上。选择最短路径时可用的选项较多,包括轮询负载均衡、最小化时延等可能会很慢——每个事物都包含了附加的重定向步骤。而且,第一台服务器一定要能够处理处理请求负载
DNS重定向DNS服务器决定在URL的主机名中返回多个IP地址中的哪一个选择最短路径时可用的选项较多,包括轮询负载均衡、最小化时延等需要配置DNS服务器
任播寻址几台服务器使用相同的IP地址。每台服务器都会伪装成一个骨干路由器。其他路由器会将共享IP地址分组发送给最近的服务器路由器有内建的最短路径路由功能需要配置路由器。有地址冲突的风险。
IP MAC 转发交换机或路由器这样的网元会读取分组的目的地址。如果应该将分组重定向,交换机会将服务器或代理的目标MAC地址赋予分组节省带宽,提高QOS。负载均衡服务器或代理的跳距必须是1
IP地址转发第四层交换机会评估分组的目的端口并将重定向分组的IP地址改成代理或镜像服务器的IP地址

HTTP重定向

在服务器收到请求报文后,服务器没有回送带有HTTP状态码200的Web 页面主体,而是回送了一个带有状态码:302的重定向报文:

HTTP/1.0 302 Redirect
Server:Stronghold/2.4.2 Apache/1.3.6
Location: http://161.58.228.45/hammers.html

这时浏览器会用重定向URL重新发送请求,这次会发送给主机161.58.228.45:

GET /hammers.html HTTP/1.0
Host: 161.58.228.45
User-Agent: Mozilla/4.51 [en] (X11; U; IRIX 6.2 IP22)

当然另一个客户端可能会被重定向到另一台服务器上去。

HTTP 重定向的缺点:


  • 需要原始服务器进行大量处理来判断要重定向到哪台服务器上去。有时,发布重定向所需的处理量几乎与提供页面本身所需的处理量一样。
  • 增加了用户时延,因为访问页面时要进行两次往返。
  • 如果重定向服务器出故障,站点就会瘫痪。

由于存在这些弱点,HTTP重定向通常都会与其他一种或多种重定向技术结合使用。


DNS重定向

DNS允许将几个IP地址关联到一个域中,可以配置DNS解析程序,或对其进行编程,以返回可变的IP地址。

解析程序返回IP地址时的算法策略较多,包括轮询负载均衡、最小化时延等


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
author-avatar
JY哥在世
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有